package com.charley.icloud.swagger;

import javax.annotation.Resource;

import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.SpecVersion;
import io.swagger.v3.oas.models.info.Contact;
import io.swagger.v3.oas.models.info.Info;
import io.swagger.v3.oas.models.info.License;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;

@Configuration
@ConditionalOnClass({OpenAPI.class})
@PropertySource(value = "classpath:swagger.properties", ignoreResourceNotFound = true, encoding = "UTF-8")
@EnableConfigurationProperties(SwaggerProperties.class)
public class SwaggerConfig {

    @Resource
    private SwaggerProperties swaggerProperties;

    /**
     * 配置默认分组
     */
    @Bean
    public OpenAPI buildDefaultOpenApi() {
        return new OpenAPI(SpecVersion.V30)
                .info(buildApiInfo());
    }

    /**
     * 配置API的基本信息 -- 主页说明
     */
    private Info buildApiInfo() {
        // 实例化 Info
        return new Info()
                .title(swaggerProperties.getTitle()) // 标题 应用的名称
                .description(swaggerProperties.getDescription()) // 简介，对应用的描述说明
                .termsOfService(swaggerProperties.getTermsOfServiceUrl()) // 指向服务条款的URL地址，必须是URL地址格式
                .contact(new Contact() // 所开放的API的联系人信息
                        .name(swaggerProperties.getAuthor())// 人或组织的名称
                        .email(swaggerProperties.getEmail())// 人或组织的email地址，必须是email地址格式
                        .url( swaggerProperties.getTermsOfServiceUrl()) // 指向联系人信息的URL地址，必须是URL地址格式
                )
                .license(new License().name("Apache 2.0").url("http://www.charleyg.com/")) // 所开放的API的证书信息
                .version(swaggerProperties.getVersion());// API文档的版本信息
    }
}
